﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using MecSom.Dados;

namespace MecSom_Wpf.UserControls {
    /// <summary>
    /// Interaction logic for Pesquisa.xaml
    /// </summary>
    public partial class TelaPesquisa : UserControl {
        string tipoAnterior, marcaAnterior;


        public bool PossuiFiltro {
            get {
                return (
                    tbNumero.Numero > 0
                    || (dtpData.Text != null && !String.IsNullOrEmpty(dtpData.Text.Trim()))
                    || !String.IsNullOrEmpty(tbCliente.Text.Trim())
                    || (tbTelefone.Value != null && !String.IsNullOrEmpty(tbTelefone.Value.ToString().Trim()))
                    || !String.IsNullOrEmpty(cmbTipo.Text.Trim())
                    || !String.IsNullOrEmpty(cmbMarca.Text.Trim())
                    || !String.IsNullOrEmpty(cmbModelo.Text.Trim())
                    || !String.IsNullOrEmpty(cmbSituacao.Text.Trim())
                );
            }
        }


        #region Valores selecionados para filtro

        public int? Numero {
            get {
                return (tbNumero.Numero.HasValue && tbNumero.Numero > 0 ? (int)tbNumero.Numero.Value : (int?)null);
            }
        }

        public DateTime? Data {
            get {
                if (dtpData.Text == null || String.IsNullOrEmpty(dtpData.Text)) return null;

                return DateTime.Parse(dtpData.Text);
            }
        }

        public string Cliente {
            get {
                return (String.IsNullOrEmpty(tbCliente.Text.Trim()) ? null : tbCliente.Text.Trim());
            }
        }

        public string Telefone {
            get {
                if (tbTelefone.Value == null) return null;

                return (String.IsNullOrEmpty(tbTelefone.Value.ToString().Trim()) ? null : tbTelefone.Value.ToString());
            }
        }

        public bool? ProcurarContato {
            get {
                return chkContato.IsChecked;
            }
        }

        public string Tipo {
            get {
                return (String.IsNullOrEmpty(cmbTipo.Text.Trim()) ? null : cmbTipo.Text.Trim());
            }
        }

        public string Marca {
            get {
                return (String.IsNullOrEmpty(cmbMarca.Text.Trim()) ? null : cmbMarca.Text.Trim());
            }
        }

        public string Modelo {
            get {
                return (String.IsNullOrEmpty(cmbModelo.Text.Trim()) ? null : cmbModelo.Text.Trim());
            }
        }

        public string Situacao {
            get {
                return (String.IsNullOrEmpty(cmbSituacao.Text.Trim()) ? null : cmbSituacao.Text.Trim());
            }
        }

        #endregion Valores selecionados para filtro


        public event EventHandler Pesquisar;


        public TelaPesquisa() {
            InitializeComponent();

            tipoAnterior = "---";
            marcaAnterior = "---";
        }


        private void UserControl_Loaded(object sender, RoutedEventArgs e) {
            CarregarListas(true);
        }

        private void btnPesquisar_Click(object sender, RoutedEventArgs e) {
            Pesquisar.Invoke(sender, e);
        }

        private void btnLimpar_Click(object sender, RoutedEventArgs e) {
            tbNumero.Clear();
        }


        private void CarregarListas(bool carregarTipo) {
            if (carregarTipo)
                cmbTipo.ItemsSource = Servico.CarregarTipos();

            var alterouTipo = ((object)tipoAnterior != cmbTipo.SelectedItem);
            var alterouMarca = ((object)marcaAnterior != cmbMarca.SelectedItem);

            var tipo = (cmbTipo.SelectedItem == null ? null : (string)cmbTipo.SelectedItem);
            var marca = (cmbMarca.SelectedItem == null ? null : (string)cmbMarca.SelectedItem);

            if (alterouTipo)
                cmbMarca.ItemsSource = Servico.CarregarMarcas(tipo);

            if (alterouTipo || alterouMarca)
                cmbModelo.ItemsSource = Servico.CarregarModelos(tipo, marca);

            if (cmbTipo.SelectedItem == null)
                tipoAnterior = null;
            else
                tipoAnterior = (string)cmbTipo.SelectedItem;

            if (cmbMarca.SelectedItem == null)
                marcaAnterior = null;
            else
                marcaAnterior = (string)cmbMarca.SelectedItem;
        }
        private void CarregarListas(object sender, RoutedEventArgs e) {
            CarregarListas(false);
        }
    }
}
